perm filename ROM2.FAI[CMS,LCS]2 blob sn#295992 filedate 1977-07-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00013 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		.INSERT	ASMBL.FAI[CMS,LCS]
C00003 00003	 BIT RATE GEN CODES
C00006 00004	 MAIN DDT LOOP
C00008 00005		C3:	CMPI	"P"				2
C00010 00006	 TTY MODE	CHECK THIS OUT FIRST
C00013 00007	 PRINT ADDRESS/VAL 
C00015 00008	 INPUT FROM BEEHIVE
C00016 00009	 RESET BEEHIVE I/O
C00018 00010	 UNLOADER
C00020 00011	 OUTSTR   OUT TO BEE IF TFLG IS CLEAR OR MODEM IF NOT EQUAL
C00022 00012	 BLT ROUTINE
C00024 00013	 ROM INTER VECTS
C00025 ENDMK
C⊗;
	.INSERT	ASMBL.FAI[CMS,LCS]
; RAM
	PCL:	0	;0
	PCH:	1	;1
	PS:	2	;2
	A:	376	;3

	X:	176	;4
	Y:	377	;5
	SP:	377	;6
	ONMIA:	377	;7

	BEES:	377	;10	OLD BEEHIVE STATUS
	OBEEC:	377	;11	DEFAULT BEEHIVE CONTROL WORD
	BEEB0:	377	;12
	BEEB1:	377	;13

	ADR:	377	;14
		377	;15
	VAL:	377	;16
	TFLG:	377	;17
	TMP:	377	;20
		377	;21
		111	;22  ← FF MARK

; ODT RAM & INTERUPT VECTORS
	LOC 1000

	IRQA:	REPEAT 3,{111↔}	;1000 - 1002
	IRQB:	REPEAT 2,{111↔}	;1003 - 1004
	
	NMIA:	REPEAT 3,{333↔}	;1005 - 1007
		377		;1010 ← FF MARK
; BIT RATE GEN CODES
;	0 = 0			10 = 9600
;	1 = 19.2K DON'T USE	11 = 4800
;	2 = 50			12 = 1800
;	3 = 75			13 = 1200
;	4 = 134.5		14 = 2400
;	5 = 200			15 = 300
;	6 = 600			16 = 150
;	7 = 2400		17 = 110

; EPROM STARTS HERE
	LOC 176274	;TOP 1K SHOULD BE 176000
;	LOC 176000
	BEEC ← 174100 ↔ BEED ← 174101	;BEEHIVE CONTROL AND I/O ADDRESS
	MODC ← 174120 ↔ MODD ← 174121	;MODEM CONTROL AND I/O ADDRESS
	BEEDEF←MODDEF←25	;BEEHIVE AND MODEM CONTROL DEFAULTS
	BBRDEF←MBRDEF←15	;BIT RATE DEFAULTS 15=300 (FASTER FOR BEE?)

	BBIT←20		;BREAK BIT

; BREAK OPCODE CHECC
	BRKCK:	STAZ	A	;SAVE A 		2
		PLA		;GET OLD PS		1
		PHA		;RESTORE STACK		1
		ANDI	BBIT	;			2
		BNE	BRKIN	;AND CK FOR BRK		2
		LDAZ	A	;			2
		JMPIN	IRQB	;ELSE JUMP @IRQB	3

	PTBL:	4		;PS (4 IS IBIT?)	1
		20		;PCL			1
		2		;PCH			1


	VINIT:	JMP	BRKCK	;INTERUPT JMP CODE	3
		10		;I/O 			1
		2		;			1
 		JMP	ODT	;			3

; RESET STARTS HERE
	RSTA:	LDAI	BEEDEF	;SETUP BAE CONTROL	2
		STAZ	OBEEC	;WORD DEFAULT		2
		LDAI	BBRDEF	;SETUP BRATE DEFAULT	2
		STAZ	BEEB0	;			2
		STAZ	BEEB1	;			2

	↓LDXI	2	;			2
	PLOOP:	LDAX	PTBL	;SETUP PC AND PS	3
		PHA		;			2
		DEX		;			1
		BPL	PLOOP	;			2

		LDXI	7	;			2
	JLOOP:	LDAX	VINIT	;SETUP INT VECT		3
		STAX	1000	;			3
		DEX		;			1
		BPL	JLOOP	;			2

; JUMP TO HERE FOR DDT AND SAVE EVERYTHING
	ODT:	STAZ	A	;SAVE A			2
	BRKIN:	LDA	1005	;NMIA			3
		STAZ	ONMIA	;SAVE NMIA AND FORCE	2
		LDAI	RTI	;RETURN FROM INTERUPT	2
		STA	1005	;ON NMI			3
		STXZ	X	;SAVE X			2
		STYZ	Y	;SAVE Y			2
		PLA		;			1
		STAZ	PS	;SAVE PS AND PC		2
		PLA		;			1
		STAZ	PCL	;			2
		STAZ	ADR	;SETUP ADDRESS		2
		PLA		;			1
		STAZ	PCH	;			2
		STAZ	ADR+1	;			2
		TSX		;			1
		STXZ	SP	;SAVE STACK PONITER	2
		CLD		;FORCE BINARY		1
	NIN:	JSR	SETBEE	;INIT BEEHIVE I/O	3
; MAIN DDT LOOP
	PLF:	LDAI	12	;PRINT LF		2
		JSR	PCHR	;			3
		
	PCR:	LDAI	15	;PRINT CR		2
		JSR	PCHR	;			3

		LDXI	0	;			2
		LDAIX	ADR	;GET CONTENTS		2
		STAZ	VAL	;			2
		JSR	PAV	;PRINT ADDRESS/VAL	3

		LDAI	" "	;PRINT SPACE		2
		JSR	PCHR	;			3

		STXZ	TMP	;X IS 0			2
		STXZ	TMP+1	;			2
		STXZ	TFLG	;			2

	NXTCHR:	JSR	GCHR	;WAIT TILL CHR		3
		ANDI	177	;STRIP TOP BIT		2
		JSR	PCHR	;ECHO IT		3

		CMPI	"↑"	;CHECK THIS		2
		BNE	C1	;			2
		LDAZ	ADR	;STEP BACK		2
		BNE	NOD	;			2
		DECZ	ADR+1	;			2
	NOD:	DECZ	ADR	;			2
		JMP	PLF	;			3

	C1:	CMPI	12	;LF			2
		BNE	C2	;			2
		LDAZ	TFLG	;STEP FORWARD		2
		BEQ	NODEP	;			2
		LDAZ	TMP	;DEPOSIT		2
		STAIX	ADR	;			2
	NODEP:	INCZ	ADR	;STEP			2
		BNE	PCR	;			2
		INCZ	ADR+1	;			2
		JMP	PCR	;			3

	C2:	CMPI	"/"	;			2
		BNE	C3	;			2
		LDAZ	TFLG	;CHECK FOR NEW ADDRESS	2
		BEQ	EROR	;NO ADDRESS		2
		LDAZ	TMP	;EXAMIN			2
		STAZ	ADR	;			2
		LDAZ	TMP+1	;			2
		STAZ	ADR+1	;			2
		JMP	PLF	;			3
¬
	C3:	CM@!$∩E D$v∩∩∩H~∀∩∪	≥
∪εP∩v∩∩$d~∀∪≥≡t&d"εh&∀∩J∩⊗0In2⊗
2∃α∩% $%HhP$&N$λ&
IIn∩⊗4
V2Q∧∩&Qα∀
R∀%_h($&≥"∧&
∪%l$HIL4(HJ2∩εPJ>
⊗,_%l$HIH4(HJNR∧L∩⊗⊗KZ
ε⊗DJZ∃α≤z:RJ|`%L4Ph($&d"bh&≥%nN-"VAα≥"ε∞,HIH4(HJRbLHIl$$Kλ4($Lb∩εhMα∞ %XH$%HhP$&BDλ$%lHH%D4PH&2∩
P&B∞`Il$$K⊂4($Mα"∧$KX$$%λh($&d"εh&¬_%l$HIH4(HJB"∧HIl$$Kλ4($Lb∩bhM@%l$HIH4(HJ2∩fPJd%lHH%H4PH&2∩
P&>:lJ∧%n4Jaα~M∩NQαtj%α
M"∀%HhP$&N$λ%EAβ(%l$HIL4(HJ2∩εPJ∧%lHH%H4PH&JRHH%nN$
JQα¬∩>≡Jh$%DhP4(&≠!h&∞mα$%
"⊂%n∞D*∞-α4zIαR%Iα6>$(%H4PH&
⊗λJRRdKX$$%⊂h($&≤jB$%∀⊃λ%n≤B⊗∞-∧2>Iα∀z>RN%∩ε@%⊂h($&∀*D&
|zP%lHH%H4PH&∞6∧H%
1⊂In∞",~-α~⎇⊃α2> $%HhP$&
-λ&
>⎇ %l$HIH4(HH4($L~6B$J∩Uλ4PH&
:(J∞.6 h($&TjAαVtb>ε⊂hP&∞.m!h&∞mα$%
j⊂4($L∩:∀&u*44(HJ*6@LjRNPhP4*:,ih$&≤jB$%3%n∞D*∞-α4zIα>≥"ε1αu*4%HhP$&
≤_&⊗J⎇⊂%l$HIH4(HJ∞6BHI]@%XH$%HhP$&
≥_&⊗J⎇⊂%n⊗∃∩>Iα|qαV:\r>↑8K⊂4(4PH&2∩DH%L%\rV6
-⊂&>→∧∩&RLHIH4(M~2>>βP&εNeP&R6InN"L2QαRm↓αε:"αR6A[λ%H4PH&J>eP&R6αYD%lHH%H4PH&∩⊗@H%l$HID4(HJ
:∀M~2>>Il$$K⊂4($L
:∩$K8%l$HIH4(HJ>JεPJR6@KZNRV41α&Q∧
Qα
⎇"R>4K⊂4($M~RεhM"6@%XH$%HhP$&&t~h&R4b≤%n≤*QαRm↓α~28$%HhP$&
t(&:⊗E %l$HIH4(hP&⊗J⎇⊃h&2$
$%\KZz≥HH%H4PH&*N⊂JB∞"⊂InJ&t9α
⊗d`$%LhP&:⊗E!h&*m&:b$~"H%XH$%LhP4(1mα%"eα6|"∀&∞D*∞-α$B&Mα⎇*Qα~M∩NP4PJRRePJ*NHM~⊗R6| %n&tJQα6|"⊗4$K_4($LRNH&≤*R:6HInN⊗%*Aα&u"⊗JV¬!αZ⊗≥">H%_h(4(M"2>>βP&2∩λJ
⊗⊗_In∞.,~-α&2α
⊗∃¬"Jε:_IL4(HJε:∩HIH%n∀*≥α&~α⊗6B%H$%HhP$&
-λ&:>⊂Il$$K⊂4(4PH&2∩λJ6>∩_In∞",~-α6|!αJ⊗≥0$%HhP$&2≥∩∧$%\2>Iα≤BH$%λh($&∀~&:|⊂%l$HIH4(HJ2∩∧Lj>∩⊂KZ≡⊗Q∧~"Iα5∩>5αlz∩⊗4K_4($M~R∧&∀*⊗⊂%\zVRB-!αR=∧∩⊗∀$K_4(4PJ:>	PJ2∩∧Lj>∩KZ∞"⊗≤Yα&→∧j>⊃α%∩ε:LK_4($L
:∩%IH%n∀*≥α&~α⊗6B%H$%DhP$&
-λ&R2|z@%lHH%H4Ph($&d"∧&
,*%n≤Yα6>"αJ⊗∞0H%L4PH&2N∀λ$%n4zIα∞E⊂$%DhP$&
≤_&R2|z@%lHH%H4PH&2∩λJ
⊗⊗ In≡⊗"α∞"I∧2J>5∧∩⊗∀%_h($&≥"∧&6|"⊂%n⎇*RBV"αR=αlz∩⊗4		JMP	TLOOP	;			3

; BOOT STRAP
	BOOT:	PHA		;SAVE DDT CHR		1
		LDAZ	PCL
		STAZ	ADR
		LDAZ	PCH
		STAZ	ADR+1	;			2
	↓JSR	SETNMI	;INIT INTERUPT VECTOR	3
		INX		;CKECK THIS		2
α		LDAI	"↑"	;OUTPUT CHR TO 		2	
		JSR	WMOD	;INITBOOTSTRAP		3

	BOTLOP:	LDYI	1	0⊗∩$∩d
∀%⊃β→h∪∃'$%%≠∨λ$w∂(↓β⊃$∩$f~∀∩%β⊂~∩HIEM\KX$$%⊂h($_9U∧Hα(P∧!.prλXp¬P$Q⊂"'g⊃DDYεB∧@	BEQ	DONE	0⊗∩$∩d4PH&
∞α1∃D∀YI@KX⊃⊃∪⊂"B"(→αh$DLε0	;			2
		BCC	XBELL	0⊗∩$∩d4PH&BαλH%nN
2∃α∞E⊂$%DhP$&2$
$%TKX$$%⊂h $&≥"∧&
,*⊂%@1⊃⊂K_Q!⊂M∧β⊂"!↔b""&⊃ ¬εEαf ∂ADIT:	DEY∩∩mβ⊃π,A∪A→∪%'λ$∩b4PH&
:(J0∀L)A∪@1 ∧DYβ@
∩∪¬'⊂∩∧HIfNαL2Qα"b→α↑
H$%DhP$&ε≤b∧$%XH$%DhP$&ε≤b∧∧%XH$%DhP$&ε≤b∧$%XH$%DhP$&NαH∃PMHiD(K8∧p*HαP ∀NP		2
	∪∃5 ∪⊃β1∩`,HH%L4Ph(&:L∩1h_→d$H⊗⊂
a↔b""& αE∧DSβRAZ	TF@→∞$p∞ε∩ ∧¬$⎇↓⊃∪⊂@"B"*:α dlα`b)∧Nij'i⊃P  b∀∧DYεB∧@	IN@π4&"H%@8_E∩¬tλ∀%∩¬0λε⊃",C!! ∧a'⊃Da'j∪'h∧]S ¬P@($∩∩d~(∩∪∪≥λ
`&ε 
"[λ↔1⊂HK!Q HL)hPL∀xID`:α.b!⊃,C"AP¬	DOL¬∃HMα2∧∧IX$$%λh $_9U∧Hα(C∧∧P			2~∀$∪¬λJ2>ε I`_λα"$AP¬De∪h∧cgα]i`∀ART ON BGOT		3
	L@∨β⊂t∪∃≠@∪%'≤$v$∧I_4(Q!∃D∀YICPLHH∀HKq↔4∧IDαE@Qj"!⊗@εE∧Bij DP ¬ED	;DGN≥(A/β%(∩∩f4∀∩&d"ε$%I`_H⊃⊗ h⊂⊃_$-λα3∪h_∩5α'⊃""$APA"@↓Gh∀∀I→Uλ⊂(H∀Q4j5βk fλεE∧h⊂k≥∧f⊃,$DXB]QP'Q⊂!d)∀DDYεB∧Dij⊗-∧j#∪#D]iQj⊂!$U⊂&`iRDDYεB∧Df"⊗dDY∧NQP'cλ!$j)H∃P!DBYεE∧Be)i∧T&'ghα]h)$S*⊂_⊂∪i⊂_DBYFE∧Bf",$BZD]DBDYεEαDf" RD[D]BDDYεB∧Dij⊂m∧j#∪#D]DBDYεEαDe)iαaf'gT∧]h)∩g*⊂~H'*fiK⊂_⊂⊗H≠DYFB∧@	LDAI	"∂"	3			2
		JSR	PCHR	;PRINT /		3
		LDXI	1	3			2
		LDYI	3	;BIT MASK AND	 	2
		STYZ	TFLG	;# OF BITS +1		2
		JSR	DLOH∂ ∩m!%∪≥P@`@Zf∩∩f4∀∩β→⊃1∩∩d$v∩∩∩H~∀∩∪1	β∩∩\∩v∩∩$d~∀∩%')β4%)
→∞$v∩∩∩H~∀∩∪)'$∪π1∨↔ ∩m!%∪≥P@dA≥U≠&X@@@Z@n$f~∀∩%%)&∩$v∩∩∩D~∀~∀%π→∨∨@t∪→	e∩∩f∩m
∨$@LA¬∪)LA)∞A∧A≥+~$d~∀∪I→∨∨ h∪%∨→h∪-β_$w%∨)¬)
Aβ⊃$A-β0∩∩d~(∩∪%∨14∪β	H∩v∩∩$d~∀∩%%∨→4%β	$VD∩v∩∩$d~∀∪⊃→∨∨ h∪	2$∩v∩∩$b~∀∩%¬≥
∪I→∨∨ $v∩∩∩H~∀∩∪1	β4∪Yβ_∩w≥(A≥∃1(A≥U≠¬$$d~∀∩%β≥	4%)
→∞$v∩∩∩H~∀∩∪=%β∩∩X`∩w≠¬↔
AβMπ∪∩∩$d~∀∩%∃'$∪Aπ⊃$∩m!%∪≥PA∪(∩$f~∀∩%	 ∩$v∩∩∩D~∀∩∪	≥
∪π1∨∨ ∩m≥1(↓≥+~∩$f~∀∩%%)&∩$v∩∩∩D~∀~∀_vA∪9!+(A→%∨~A	⊃∪Y
~(L:ε"IPJ2α∧L∩⊗⊗IX$$%_h($→J5∀λα".hd"aeH$c⊂"Sh*,DBX@
		BCC	GC@@$$p$⊃∩ h↓@∧Df⊃ @	BEED	;GEPλAπ!$∩∩f4⊂∩∪%Q&∩∩v$∩∩b~(rA∨+Q!+(AQ_
α
,*"&Z(h(&B≤BIh&∧B∧$%]~ε@4Tλ4E⊂α"$!QB5p)~∞B3λH ∧a"QaD]DBDYFEαD`g"∩DY∧]⊂βHECK AF FUL@_∩$d⊂∀(HJα-⊃~tMA↔0HH⊗!P@!"4∪λ⊃".b!⊃,#"A⊃4p
 Ba"bbα]h ∩INT IT		3
		RTS		0⊗∩$∩b4Ph)mαLrBVQ∧2J>5∧j>∩⊗hh &Jlz⊃h→HDλLYxD1(¬DDBYFE∧Bd∧S@%∧∩∩gπ!π-∧J→α⊗mαRd$Hε⊂hP⊃_$8b4S)xα.b!⊃,C"A⊃3⊃⊂!→3q⊃↓↔qq5∧λr⊂	∧BYFE∧Bi*)DB]DDDLFA≥@ MP)!U(A)≡↓≠∨	4~∀∪/5∨λt∪A⊃α∩∩m'β-
↓π⊃$∩$b~(L2V21PJ2∩∧Lj>∩KX$$%_h($_→d$H⊗!∪\≤λX4Z∧α1Hλj3∪α!⊗@εE∧Ba"`⊃	FULL	;			2
α		PLA		;			1
		STA	MODD	;OUTPUT↓∪ @∩$f~∀∩%%)&∩$r∩α∩D~∀4P1mα∀*N⊗Q∧∩⊗⊗"M2∃α∃yphPQ!∀*Lλ↔dε-m_M_⊂@ @¬$bA|@bnhβ	QD%\∩⊗∃α∃∩εR∃∧J9>>-!αε∩%⊂4(ε∃⊃Iα⎇β	]@#⊗@Dαh⊂TF4↔h&vα_Z→B]fgbλ!) j⊃P$g/OQT ADDR

	SETBEE:	LDA	B@ε$s'β-∀A∨2 ∧∧∀1(∀jH5∃4a⊗c"B!~u⊂6A_Q14a↔b""&!"B")H⊂6B((αba_α]ibj∃h⊂!"Qd$k"H!$j⊂∀ j"DLεE∧DTj Da∀_∧]aR g"f∀DDYFB∧@f"⊂m∧a"Qa_D]Tbj*hλ!"bd∩k"P!∩j⊂! U"DYεB∧Dij⊂Da)λB]DDDLFE∧DS" dDLD]i"Tbj⊂ Pd`DDLεE∧DTj Da⊃baD]BDDYFB∧@f"⊂dDa"Qb"c∧Nibb*T⊂""c⊂jf*⊂ bP$KgDYεB∧Dij⊂Da"bPD]DDBYFE∧Bi*)DB]DDDLFEεE∞P)"iQj⊂&gQ"fP$KgFE∧Tbj&gQ≥∧f"⊂dDfa∀""c∧NDDDYβE∧DiU Da)∧]ibU*h⊂!∀ j"P⊂d g"S)DYFB∧Dij⊂Da)→B]DDDLFE∧DS" dDLD]i"Tbj⊂ Pd`DDLεE∧DTj DfSb!D]BDDYFB∧Df"⊂dDfgQ""c∧Nibj*T⊂""c⊂jf*⊂∪gb⊂$KgDYεB∧Dij⊂Dfgb⊂DYDDBYFE∧Bi*)DB]DDDLFEεEαdk%≥αh& FB∧Dh&⊂FE∧DT& FEαi)g≥αf" dBi*$FB∧Dij⊂DXX_
FE∧DR&h⊂∧S$gεEαDFE≥H)bj*T⊂'&dH$g*"T*h*⊂∃ aj'T⊂%*fTεA∧iQj#&dN∧f",∩DXY∧NDDDYβE∧df∪gh≥∧S" l∧Rk%∧]P&*⊂$U%⊂"'H'&d`BYFE∧Bij lαXX_~B]g&dPDDDYCE∧Db⊃l∧D]BDDXFB∧Da(∪∧df'Sh∧]DBDYεEαDi*)BD]DDBXFEεBβ≥P*g∪'`b"TεE∧jS&'`b∞∧FE∧Be)i∧Tbj'&RFE∧DS" m∧T!fεEαDij V∧`b)βE∧Df⊃ m∧h⊂dεE∧Bij mα`b)∃LD]DDBYεE∧Bdg,εB∧@f"⊗dDXDNjg&'Pb)P#∀'fP ∀!f$εB∧jf'Sh≥∧f⊃ dl∧Pb)∧]PiijfQiP,⊂∩iP_∧CE∧Db⊃lFE∧Ba'"DS)g$a∪εE∧DS)i DB]id$Q*⊂$ S#⊂'k⊃iεE∧Bf)i CE∧Df∀i FEαDf)i⊂FE∧b∪dj≥∧Si dDM_εE∧Bij mαj#&#CE∧De∀i∧kfSbεE∧Be)i∧T&gbεB∧DafT-∧j#∪#FE∧Ba"hDUf#ghβE∧De∪h∧i)SεEεEαf)g$P&≥∧`S"$DXMD]af⊃`i⊂&⊃c*εEαDf",RDXFEαDdg!V∧`b)α]`b)λ/P b∀⊂∃P_BDYεEαDa'"Bb#djα]g"l∃∧DDYβE∧DdS!m∧`Q)∃XDNdc⊂!Pi),DBYεE∧Ba'"DQ'dj∧Njg!gS $j$Sg f⊂∩*fh∧LεEεE∞P&bfSi,P*⊃ijεEαfj)j∞∧f",RDXεEαDij,V∧h)FB∧f`iN∧f" RDYFEαDij V∧h!fβE∧DiU,m∧h⊂dεE∧Sf≥∧f⊃ dlDT!fεEαDj lβE∧fl∞∧dg,βE∧Dj⊗ FE∧Bij dVDh!fβE∧DaSh$lDT!fεEαDa"hBccgbβE∧a Q≥∧f"⊂m∧h!SεE∧DTj m∧Pb)εEαDf" V∧h!dβE∧DiU m∧`Q)∃XFB∧c$g∩i]∧e∪h∧h&⊃εE∧cSgb≥∧Rg!m∧T)FE∧Ba'"DSlεE∧Bdg!mαh!fεB∧Da'⊃DffεB∧Ddg⊂m∧h!RεE∧DS" m∧T!dεEαDafh∩DY_∧NZ%FEαDa'"Bf`iFB∧Da"TDc$g∩iFEβ≥P'jU)j)   OET T@≡A	
A∪_A)
→≤A∪&A
→⊗ε⊂∧∧`:H∪3hH3(∩(d⊃Su∧λ450)@ ¬∧gTh∧R:	TSX
		SEI
∀α∪)'$∪&I)≠ ~(∩∪→	a∩∩`~(∪'∨+Pt∪→	¬∪0∪)5 ~(HJ
6$L*:%8¬∀A↔pR5∧εh∩4dλ3Q⊂⊃"f$fRjεE∧Bf",mαj#&#CE		BN@
∪!5∨λ∩w	
A∪_A)
→≤z`A≠=λAβ6~∀∩%∃'$∪Aβ⊃$~(∩∪∃≠@∪∪)≠@~∀∪!5∨λt∪)'$∪/5∨λ~∀%∪)6βP&&:≥P&B6α↓PPH_)d(M9zU (!⊃∀Lt8εB*I4
`_CE		JMP	SOUT

	ENDSP	$t%β⊃∩~(∩∪)'`~∀∩∪)≠ ∪!=!&∩v→∪0A'Qβπε~(~∧∪&I)≠ @PJ2∩ε@IQALhP$&N$
h&Rm4($Lb∩ε@↓⊗Cβ Q!⊂M≥H≠ M$	1

; 16 BIT ARITH
; FIXED BY REM TO HAVE ARGS AND RESULT IN USUAL LOW-HIGH ORDER
	ADD16:	TSX		;			1 (FIXED BY REM, WAS TXS)
		LDAX	405	;GET LOW		3
		CLC		;			1
		ADCX	403	;			3
		STAX	405	;			3
		LDAX	406	;GET HIGH		3
		ADCX	404	;			3
	FIXS:	STAX	406	;			3
;Now bubble return address up two bytes on stack
	POPS:	PLA		;			1
		STAX	403	;			3
		PLA		;			1
		STAX	404	;			3
		RTS		;			1

	SUB16:	TSX		;			1 (FIXED BY REM, WAS TXS)
		LDAX	405	;GET LOW		3
		SEC		;			1
		SBCX	403	;			3
		STAX	405	;			3
		LDAX	406	;GET HIGH		3
		SBCX	404	;			3
		JMP	FIXS	;			3

; BLT ROUTINE
	BLTR:	TSX
		SEI
		LDAX	410	;STACK SHOULD HAVE
		STAZ	ADR+1	;+10	SOR ADR H&L
		LDAX	407	;+6	DEST ADR H&L
		STAZ	ADR	;+4	LAST DEST ADR H&L
		LDAX	406
		STAZ	PCH
		LDAX	405
		STAZ	PCL
		JSR	S2TMP
		LDXI	0
	BLTLOP:	LDAIX	ADR
		STAIX	TMP
		LDAZ	TMP
		CMPZ	PCL
		BNE	INCIT
		LDAZ	TMP+1
		CMPZ	PCH
		BEQ	ENDBLT
	INCIT:	INCZ	ADR
		BNE	INCT
		INCZ	ADR+1
	INCT:	INCZ	TMP
		BNE	BLTLOP
		INCZ	TMP+1
		JMP	BLTLOP
	ENDBLT:	CLI
		TSX
		PLA
		STAX	407
		PLA
		STAX	410
		PLA
		PLA
		PLA
		PLA
		RTS
; RELOCATABLE SUBROUTINE SUBROUTINE
	RELSUB:	TSX
		LDAX	402
		PHA
		LDAX	401
		PHA
		CLC
		ADCI	2
		STAX	401
		BCC	SKP
		INCX	402
		CLC
	SKP:	RTS
; ROM INTER VECTS
	LOC 200265
;	LOC 177772

	0

	NMIV:	5
		2
	RSTV:	30
		374
	IRQV:	0
		2

;	NMIV:	ABSO NMIA	;			2
;	RSTV:	ABSO RSTA	;			2
;	IRQV:	ABSO IRQA	;		       _2_
				;			6
	END